這篇文章是閱讀Asabeneh的30 Days Of Python: Day 20 - PIP後的學習筆記與心得。
就像前端有 npm,python 使用 pip (preferred installer program) 來安裝套件 (packages) —可以讓我們安裝並應用的模組。
從 Python 3.4 開始,pip 被預設包含在 Python 二進制安裝程式中。
-- 安裝 Python 模組 | Python Docs
要確認 pip 是否有安裝,也可以這樣做:
pip --version
這邊會安裝 numpy
—社群中相當熱門,用來做機器學習及資料科學的套件;原文章在 Day 24 會使用到。它的特色有:
安裝:
pip install numpy
使用小範例:
import numpy
numpy.version.version
lst = [1, 2, 3, 4, 5]
np_arr = numpy.array(lst)
print(np_arr * 2) # [ 2 4 6 8 10]
print(np_arr + 2) # [3 4 5 6 7]
print(np_arr) # [1 2 3 4 5]
再安裝另一個套件試試,pandas
—提供高效易用的資料結構及資料分析工具:
安裝:
pip install pandas
原文中 Day 25 會提到關於這個套件的使用。
額外被提到的套件:webbrowser
import webbrowser
url_lists = [
'http://www.python.org',
'https://www.google.com',
]
for url in url_lists:
webbrowser.open_new_tab(url)
就像 npm
,pip
要解除套件安裝的話,可以用這個指令:
pip uninstall <packagename>
還是像 npm
,pip
要列出現在已經安裝的套件列表可以用:
pip list
這個指令可以看到這個套件的相關資訊:
pip show <packagename>
pip show numpy
Name: numpy
Version: 1.23.3
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: BSD
Location: c:\users
Requires:
Required-by:
加上 --verbose
會看到更多資訊:
pip show --verbose numpy
Name: numpy
Version: 1.23.3
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: BSD
Location: c:\users
Requires:
Required-by:
Metadata-Version: 2.1
Installer: pip
Classifiers:
Development Status :: 5 - Production/Stable
Intended Audience :: Science/Research
Intended Audience :: Developers
License :: OSI Approved :: BSD License
Programming Language :: C
Programming Language :: Python
Programming Language :: Python :: 3
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: 3 :: Only
Programming Language :: Python :: Implementation :: CPython
Topic :: Software Development
Topic :: Scientific/Engineering
Typing :: Typed
Operating System :: Microsoft :: Windows
Operating System :: POSIX
Operating System :: Unix
Operating System :: MacOS
Entry-points:
[array_api]
numpy = numpy.array_api
[console_scripts]
f2py = numpy.f2py.f2py2e:main
[pyinstaller40]
hook-dirs = numpy:_pyinstaller_hooks_dir
Project-URLs:
Bug Tracker, https://github.com/numpy/numpy/issues
Documentation, https://numpy.org/doc/1.23
Source Code, https://github.com/numpy/numpy
pip freeze
執行這個指令會輸出,當前專案使用的套件的版本,就像 npm
的 package.json
做的,但Python中要自己創建一個 requirements.txt
檔案來達成:
requirements 只是慣用名稱
pip freeze > requirements.txt
然後拿到專案的人可以用下方指令安裝列表中的套件:
pip install -r requirements.txt
Python 可以安裝 requests 這個模組,來透過網址請求資料,也就是跟瀏覽器做的事一樣,是網路爬蟲的重要工具之一:
pip install requests
首先透過 requests.get()
向網站取得回應,這邊我使用 SWAPI (星際大戰的資料) 來做例子:
status_code
:請求的回應代碼,比如200, 404等。headers
:請求的表頭,像是 Content-Type、Allow。import requests
url = "https://swapi.dev/api/people/1"
response = requests.get(url)
print(response) # <Response [200]>
print(response.status_code) # 200
print(response.headers)
# {'Server': 'nginx/1.16.1', 'Date': 'Fri, 07 Oct 2022 05:36:04 GMT', 'Content-Type': 'application/json', ...
如果回應是給txt、html,xml和其他檔案格式,可以使用text
:
text
:網站的文字資訊,就是HTML的部分。print(response.text)
# {"name":"Luke Skywalker","height":"172","mass":"77","hair_color":"blond", ...
如果回應是給JSON字串:
json
:可以把回應收到JSON字串轉為物件。character = response.json();
print(character["name"]) # Luke Skywalker
若要讓Python視資料夾為套件,需要在裡面創建一個 __init__.py
檔案,並把 module 檔案放進裡面,資料夾結構會像這樣:
- mypackage
|-- draw.py
|-- greetings.py
|__ __init__.py
draw.py
和 greetings.py
裡面分別是:
# @filename: draw.py
def make_stairs(floors: int):
for i in range(floors):
spaces = floors - (i + 1)
print(" " * spaces + "#" * (i + 1))
# @filename: greetings.py
def greet_person():
firstname = input("What's your first name? ")
lastname = input("And what's your last name? ")
print(f"Greetings {firstname} {lastname}")
然後就可以在其他檔案中去引入 mypackage
這個資料夾:
# @filename: main.py
from mypackage import greetings, draw
draw.make_stairs(3)
greetings.greet_person()
執行結果:
#
##
###
What's your first name? John
And what's your last name? Doe
Greetings! John Doe.